- Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathSolution.rs
63 lines (56 loc) · 2.22 KB
/
Solution.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
use std::collections::HashMap;
implSolution{
pubfngrid_illumination(n:i32,lamps:Vec<Vec<i32>>,queries:Vec<Vec<i32>>) -> Vec<i32>{
letmut on_lamps = HashMap::new();
letmut illuminated_rows = HashMap::new();
letmut illuminated_cols = HashMap::new();
letmut illuminated_dias0 = HashMap::new();
letmut illuminated_dias1 = HashMap::new();
letmut ans = vec![0; queries.len()];
for lamp in&lamps {
let row = lamp[0];
let col = lamp[1];
let dia0 = row - col;
let dia1 = row + col;
if on_lamps.insert((row, col),(dia0, dia1)).is_none(){
illuminated_rows
.entry(row)
.and_modify(|c| *c += 1)
.or_insert(1);
illuminated_cols
.entry(col)
.and_modify(|c| *c += 1)
.or_insert(1);
illuminated_dias0
.entry(dia0)
.and_modify(|c| *c += 1)
.or_insert(1);
illuminated_dias1
.entry(dia1)
.and_modify(|c| *c += 1)
.or_insert(1);
}
}
for i in0..queries.len(){
let row = queries[i][0];
let col = queries[i][1];
let dia0 = row - col;
let dia1 = row + col;
ans[i] = (*illuminated_rows.get(&row).unwrap_or(&0) > 0
|| *illuminated_cols.get(&col).unwrap_or(&0) > 0
|| *illuminated_dias0.get(&dia0).unwrap_or(&0) > 0
|| *illuminated_dias1.get(&dia1).unwrap_or(&0) > 0)asi32;
for x in -1..2{
for y in -1..2{
ifletSome((dia0, dia1)) = on_lamps.remove(&(row + x, col + y)){
*illuminated_rows.get_mut(&(row + x)).unwrap() -= 1;
*illuminated_cols.get_mut(&(col + y)).unwrap() -= 1;
*illuminated_dias0.get_mut(&dia0).unwrap() -= 1;
*illuminated_dias1.get_mut(&dia1).unwrap() -= 1;
}
}
}
}
ans
}
}